package com.xx.springboot.DataStructure.LeetCode.BST;

/**
     给定一个二叉树，判断其是否是一个有效的二叉搜索树。

     假设一个二叉搜索树具有如下特征：

     节点的左子树只包含小于当前节点的数。
     节点的右子树只包含大于当前节点的数。
     所有左子树和右子树自身必须也是二叉搜索树。
     示例 1:

     输入:
        2
       / \
      1   3
     输出: true
     示例 2:

     输入:
         5
        / \
       1   4
      / \
     3   6
     输出: false
     解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ，但是其右子节点值为 4 。
 */
public class isValidBST {
    public boolean isValidBST(TreeNode root) {
        if(root == null)
            return true;
        return vaild(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean vaild(TreeNode root, long minValue, long maxValue){
        if(root == null)
            return true;
        if( root.val <= minValue || root.val >= maxValue)
            return false;

        return vaild(root.right, root.val, maxValue) && vaild(root.left, minValue, root.val);
    }
}
